// https://leetcode.cn/problems/powx-n/description/


class Solution {
public:
    double myPow(double x, int n) {
        bool flag = false;
        long t = n; // 防止取绝对值时超过 int 范围
        if (n < 0) {
            flag = true;
            t = -t;
        }
        double y = 1.0;
        while (t) {
            if (t & 1) { // 位运算更快
                y *= x;
            }
            x *= x;
            t >>= 1;    // 移位更快
        }
        if (flag) {
            return 1.0 / y;
        }
        return y;
    }
};